昨天介紹完 Chroma 後,大家應該對向量資料庫及向量有初步的認識,接下來我們要針對向量資料庫進行詳細介紹及分析。
想像你有一個巨大的圖書館,但這個圖書館很特別:你走進去不是說「我要找書名叫 XX 的書」,而是說「我要找內容跟這本書很像的書」。傳統資料庫(像 MySQL)只會幫你做前者——精確比對,你給一個關鍵字,它幫你找一模一樣或符合條件的資料。但它完全不懂「相似」是什麼意思。
向量資料庫解決的就是這個問題。做法是:先把文字、圖片這些東西丟進 Embedding 模型(就是一個轉換器),把它們變成一串數字(向量),這串數字代表這個內容在「語意空間」中的位置。意思相近的東西,這串數字就會很接近。然後向量資料庫的工作,就是幫你快速找出「哪些數字串跟我手上這串最接近」。
為什麼不能土法煉鋼,一個一個比對就好?
因為資料一多(幾百萬、幾千萬筆),逐一比對會慢到不能用。所以向量資料庫用了一些「抄捷徑」的演算法(最紅的叫 HNSW),犧牲一點點準確度,換來速度快非常多。這就是它存在的意義。
就是一串數字。你可以想成是「座標」——把一段文字、一張圖片,丟進 Embedding 模型後,它會吐出一串數字(可能是 768 個或 1536 個),這串數字代表這段內容在「意思的空間」裡的位置。
重點是:意思相近的東西,數字會排在附近。比如「貓」跟「狗」的向量會比較靠近,「貓」跟「股票」的向量會離很遠。這就是為什麼向量資料庫能做「語意搜尋」——它找的不是文字有沒有重複,而是意思像不像。
2.怎麼算「像不像」?
有了向量之後,要有個方法算兩個向量到底有多接近,常見三種算法,白話講:
餘弦相似度:只看「方向」對不對準,不管長度。最常拿來比文字意思,因為方向代表語意主題,實務上用最多。
歐氏距離:真的算兩個點在空間中的直線距離,比較「物理」的算法。
內積:算起來最快,但前提是向量長度都要先「正規化」過(統一縮放成同一個尺度),不然結果會失真。
三種其實常常算出差不多的排名,但實務上文字語意搜尋幾乎都預設用餘弦相似度。
假設你的資料庫有一千萬筆向量,使用者丟一個問題進來,理論上最準的做法是:把這一千萬筆全部都跟使用者的向量算一次距離,再排序找出最像的幾筆。這叫暴力搜尋,準是準,但慢到爆——資料一多,使用者可能要等好幾秒甚至更久,這在實際產品上完全不能接受。
所以向量資料庫的核心技術,就是想辦法「先做一些聰明的分類跟建索引」,讓查詢的時候不用真的比對全部一千萬筆,只挑「大概率會像」的一小部分來比,這樣就能把查詢時間從秒級壓到毫秒級。代價是:找出來的答案不保證100%是「最像的那幾筆」,可能會有極少數該進榜的漏掉了,但這個誤差通常小到可以忽略——用一點點準確度換巨大的速度提升,這筆交易很划算。
常見的三種做法:
HNSW:現在最紅的做法,概念類似蓋一個「多層樓的導航地圖」,從高樓層看大方向,逐層往下縮小範圍去精確定位。速度快、準確度高,市面上主流的向量資料庫(Chroma、Weaviate、Qdrant)幾乎都用它。
IVF:先把所有向量分成很多個「群」,查詢時只挑幾個最相關的群去比對,不用全部掃過。Faiss 常用這招。
LSH:比較舊的技術,概念是設計一種特殊的雜湊函數,讓相近的向量容易被分到同一個雜湊桶裡,現在比較少人用了。
一句話總結:向量就是把「意思」變成數字座標;相似度計算是量兩個座標像不像;ANN 則是在資料量大到爆的情況下,用一點取巧的方式加速搜尋,讓系統能在毫秒內回答你。
| 資料庫 | 特色 | 適用場景 |
|---|---|---|
| Chroma | 輕量、開源、易上手 | 本地開發、小型專案、原型驗證 |
| Pinecone | 全託管雲端服務 | 生產環境、不想管理基礎設施 |
| Weaviate | 開源、支援混合搜尋(向量+關鍵字) | 需要更複雜查詢邏輯 |
| Qdrant | 開源、Rust 寫成,效能佳 | 高效能需求場景 |
| Milvus | 開源、專為大規模設計 | 億級向量、企業級部署 |
| pgvector | PostgreSQL 擴充套件 | 已用 PostgreSQL,不想引入新系統 |
| FAISS | Facebook 開源函式庫 | 研究、需要自行整合的場景 |
| 情境 / 需求 | 推薦資料庫 | 原因 |
|---|---|---|
| 課程教學 / 原型驗證 | Chroma | 安裝簡單、免伺服器 |
| 個人專案 / MVP | Chroma、pgvector | 輕量、免維運 |
| 已有 PostgreSQL | pgvector | 直接擴充,免新系統 |
| 新創 / 不想管維運 | Pinecone | 全託管 |
| 向量 + 關鍵字混合搜尋 | Weaviate | 支援 hybrid search |
| 高併發 / 低延遲 | Qdrant | Rust 實作,效能佳 |
| 億級資料 / 企業部署 | Milvus | 支援分散式架構 |
| 研究 / 自行整合演算法 | FAISS | 函式庫,彈性高 |
| 資料隔離 / 地端部署 | Milvus、Qdrant(自架) | 開源可自管 |
| 資料量 < 10 萬筆 | 皆可 | 選開發體驗好的(Chroma) |
| 資料量 100萬~1000萬筆 | Qdrant、Weaviate、Milvus | 需索引效能 |
| 資料量 > 1 億筆 | Milvus、Pinecone | 需分散式/雲端擴展 |
| 需要多租戶 | Weaviate、Qdrant、Pinecone | 原生支援隔離 |
| 不想寫維運程式碼 | Pinecone | 全託管 |